﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestProject1.MainClasses;
namespace TestProject1
{
    [TestClass]
    public class TestOptionalInf
    {
        private IList<OptionalInf> OptInfList = new List<OptionalInf>();
        [TestMethod]
        public void TestMethodOIInit()
        {   // Проверка инициализации категории

            OptionalInf o = new OptionalInf();
            Assert.AreEqual(0, o.GetID());
            Assert.AreEqual("", o.GetName());
            Assert.AreEqual("", o.GetInf());
        }
        [TestMethod]
        public void TestMethoOIAdd()
        {   // Проверка добавления одной категории в список
            OptionalInf o = new OptionalInf();
            OptInfList.Add(o.add(133, "name", "dopinfa"));
            Assert.IsNotNull(OptInfList.First().GetID());
            Assert.IsNotNull(OptInfList.First().GetName());
            Assert.IsNotNull(OptInfList.First().GetInf());
            Assert.IsNotNull(OptInfList.First());

        }
        [TestMethod]
        public void TestMethodOIEqualAdding()
        {   // Проверка правильного заполнения полей при добавлении категории
            OptionalInf o = new OptionalInf();
            int i = 1111;
            string s1 = "name";
            string s2 = "infaa";
            OptInfList.Add(o.add(1111, "cat2", "infaa"));
            Assert.AreEqual(i, OptInfList.First().GetID());
            Assert.AreNotEqual(s1, OptInfList.First().GetName());
            Assert.AreEqual(s2, OptInfList.First().GetInf());
        }
        [TestMethod]
        public void TestMethodOIAddingToList()
        {   // Проверка добавления нескольких категорий в список     

            OptionalInf o = new OptionalInf();
            OptInfList.Add(o.add(1111, "cat2", "st"));
            Assert.IsNotNull(OptInfList.First());
            OptionalInf o1 = new OptionalInf();
            OptInfList.Add(o1.add(1112, "cat3", "st2"));
            Assert.IsNotNull(OptInfList.ElementAt(1));
            OptionalInf o2 = new OptionalInf();
            OptInfList.Add(o2.add(1131, "cat3", "s3"));
            Assert.IsNotNull(OptInfList.ElementAt(2));
        }
        [TestMethod]
        public void TestMethodOIEdit()
        {
            OptionalInf d = new OptionalInf();
            OptInfList.Add(d.add(664, "name", "infa"));
            int i = 199;
            string s1 = "name";
            string s2 = "infa";
            OptInfList.First().edit(i, s1, s2);
            Assert.AreEqual(i,  OptInfList.First().GetID());
            Assert.AreEqual(s1, OptInfList.First().GetName());
            Assert.AreEqual(s2, OptInfList.First().GetInf());
        }
        [TestMethod]
        public void TestMethodOIRemove()
        {   //Проверка удаления категории из списка

            OptionalInf d = new OptionalInf();
            OptInfList.Add(d.add(666, "dep1", "infa1"));
            OptionalInf d1 = new OptionalInf();
            OptInfList.Add(d1.add(667, "dep2", "infa2"));
            OptionalInf d2 = new OptionalInf();
            OptInfList.Add(d2.add(668, "dep1", "infa3"));
            OptionalInf d3 = new OptionalInf();
            OptInfList.Add(d3.add(669, "dep4", "infa4"));
            OptionalInf d4 = new OptionalInf();
            OptInfList.Add(d4.add(665, "dep1", "infa5"));
            int cnt = OptInfList.Count();

            for (int i = 0; i < OptInfList.Count(); i++)
            {
                if (OptInfList.ElementAt(i).GetName() == "infa1")
                {
                    Assert.IsNotNull(OptInfList.ElementAt(i + 1));
                    OptInfList.RemoveAt(i); cnt--;

                }
                Assert.AreEqual(cnt, OptInfList.Count());
            }
        }
    }
}
